package com.zw.a.basic.a09.demo01_arrays;

//案例: 演示冒泡排序.
/*
    原理:
        相邻元素两两比较, 大的往后走, 这样的话, 第一轮比较完毕后, 最大值就在最大索引处.
 */
public class Demo01 {
    public static void main(String[] args) {
        /*
            需求:
                1.已知数组int[] arr = {25, 69, 80, 57, 13}, 请编写代码对齐进行升序排序.
                2.即: 排序后结果为: arr = {13, 25, 57, 69, 80};
         */
        //1. 定义数组, 记录要排序的元素.
        int[] arr = {25, 69, 80, 57, 13};
        //2. 通过外循环, 控制比较的轮数.
        //这里的-1是为了啥?  为了提高效率.
        for (int i = 0; i < arr.length - 1; i++) {//0, 1, 2, 3
            //3. 通过内循环, 控制每轮比较的次数.
            /*
                这里的-1是为了啥?   为了防止出现索引越界异常.
                这里的-i是为了啥?   为了提高效率.
             */
            for (int j = 0; j < arr.length - 1 - i; j++) {       //4, 3, 2, 1
                //4. 如果前一个元素比后一个元素大, 就交还它们的位置.
                //即: arr[j] 和 arr[j + 1] 比较
                if (arr[j] > arr[j + 1]) {
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
        }
        //5. for循环执行结束后, 已经排好序了, 我们直接打印数组即可.
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
    }
}
